home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Libraries / TurboTCP 2.0.1 / TurboTCP source / CTCPDriver.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-21  |  3.9 KB  |  151 lines  |  [TEXT/MPCC]

  1. /*
  2. ** CTCPDriver.h
  3. **
  4. **    TurboTCP support library
  5. **    TCP driver interface class
  6. **
  7. **    Copyright © 1993-94, FrostByte Design / Eric Scouten
  8. */
  9.  
  10.  
  11. #pragma once
  12.  
  13. #include "TCL.h"
  14.  
  15. #include <Types.h>                            // get <ConditionalMacros.h> if available
  16. #if (defined(GENERATINGPOWERPC) || defined(GENERATING68K))
  17. #include <MacTCP.h>                            // Universal Headers 2.0
  18. #else
  19. #include <MacTCPCommonTypes.h>                // Univ Headers 1.0 or old headers
  20. #define GENERATINGCFM USESROUTINEDESCRIPTORS
  21. #endif
  22.  
  23. #include <OSUtils.h>
  24.  
  25. class CTCPAsyncCall;
  26. class CTCPDriver;
  27. class CTCPStream;
  28. class CTCPResolverCall;
  29.  
  30. #ifndef TCL_NO_TEMPLATES
  31.     class CTCPStreamList;
  32.     class CTCPResolverCallList;
  33. #else
  34.     class CPtrArray_CTCPStream;
  35.     class CPtrArray_CTCPResolverCall;
  36.     #define CTCPStreamList CPtrArray_CTCPStream
  37.     #define CTCPResolverCallList CPtrArray_CTCPResolverCall
  38. #endif
  39.  
  40.  
  41. #define maxResolverCalls        8            // maximum DNR calls open simultaneously
  42.  
  43.  
  44. // asynchronous queue entries
  45.  
  46. enum asyncQueueType {
  47.     asyncCall = 1,
  48.     resolverCall,
  49.     notifyStream,
  50.     disposeStream
  51. };
  52.  
  53. #if defined(powerc) || defined (__powerc)
  54. #pragma options align=mac68k
  55. #endif
  56.  
  57. struct TurboTCPQElem {
  58.     struct QElem*        qLink;                // next item in queue
  59.     short            qType;                // entry type — see asyncQueueType above
  60.     void*            qSelfLink;                // link to whatever object we had
  61.     TurboTCPQElem(void* itsSelfLink) : qSelfLink(itsSelfLink) {}
  62.                                         // special constructor
  63. };
  64.  
  65. #if defined(powerc) || defined(__powerc)
  66. #pragma options align=reset
  67. #endif
  68.  
  69. typedef enum asyncQueueType asyncQueueType;
  70. typedef struct TurboTCPQElem TurboTCPQElem;
  71. typedef TurboTCPQElem* TurboTCPQElemPtr;
  72.  
  73.  
  74. /*______________________________________________________________________
  75. **
  76. ** CTCPDriver
  77. **
  78. **    This object performs all of the housekeeping associated with the MacTCP driver.
  79. **    It keeps track of all currently open streams and handles the delayed-processing of
  80. **    MacTCP completions and notifications. It is also responsible for seeing that MacTCP is
  81. **    in a stable state (i.e. no streams left open, DNR closed) before the application quits.
  82. **
  83. **    NOTE: This class is intended for the internal use of other TurboTCP classes only.
  84. **    Accordingly, all of its methods are declared private and friend class declarations are
  85. **    used to make its members available as appropriate. No user class should have a reason
  86. **    to use this object, nor should this object be subclassed. 
  87. **
  88. **    In a future version of TurboTCP, this class will be made an abstract class to support
  89. **    MacTCP and Open Transport versions of the driver object.
  90. **
  91. */
  92.  
  93.  
  94. class CTCPDriver {
  95.  
  96. private:
  97.     friend class CTCPAsyncCall;
  98.     friend class CTCPStream;
  99.     friend class CTCPResolverCall;
  100.     friend class UTurboTCP;
  101.  
  102.  
  103.     // TCP driver availability information
  104.  
  105.     static CTCPDriver*        gTCPDriver;                // global reference to this object
  106.     Boolean                hasMacTCP;                // is there a MacTCP driver available?
  107.     Boolean                hasResolver;                // is the DNR code segment available?
  108.     short                myTCPRefNum;                // MacTCP driver’s ioRefNum
  109.     ip_addr                myIPAddress;                // our IP address
  110.  
  111.     // list of active streams/resolvers
  112.  
  113.     CTCPStreamList*        activeStreamList;            // list of active TCP streams
  114.     CTCPResolverCallList*    activeResolverList;            // list of active DNR calls
  115.     
  116.     // interrupt-process queue
  117.  
  118.     QHdr                    asyncQueue;                // interrupt-event queue
  119.  
  120.  
  121.     // constructor/destructor
  122.  
  123.                         CTCPDriver();
  124.     virtual                ~CTCPDriver() {}            // don’t use this -- use Dispose() instead
  125.     void                    Dispose();
  126.  
  127.  
  128.     // event handling
  129.     
  130.     Boolean                ProcessOneNetEvent();
  131.  
  132.  
  133.     // TCP verification routines
  134.     
  135.     ip_addr                GetIPAddr();
  136.     Boolean                CheckTCPDriver();
  137.     Boolean                CheckResolver();
  138.     short                GetTCPRefNum();
  139.     void                    FetchIPAddr();
  140.  
  141.  
  142.     // tracking active streams/resolvers
  143.  
  144.     void                    RegisterActiveStream(CTCPStream* theStream);
  145.     void                    RegisterActiveResolver(CTCPResolverCall* theResolver);
  146.     void                    RemoveActiveStream(CTCPStream* theStream);
  147.     void                    RemoveActiveResolver(CTCPResolverCall* theResolver);
  148.     Boolean                CheckResolverLimit();
  149.     
  150. };
  151.